package com.ty.service;

import com.ty.bean.Express;

import java.util.List;
import java.util.Map;

/**
 * @author 田野
 */
public interface BaseExpressService {
    /**
     * 用于查询数据库中的全部快递(总数+新增) 代取件快递(总数+新增)
     *
     * @return [{size:总数, day:新增},{size:总数, day:新增}]
     */
    List<Map<String, Integer>> console();

    /**
     * 用于分页查询数据库中的所有快递信息
     *
     * @param limit      true表示开启分页查询(默认) false 表示查询所有快递
     * @param offset     表示 SQL 语句起始索引
     * @param pageNumber 表示页查询快递数量
     * @return List<Express> 快递集合
     */
    List<Express> findAll(boolean limit, int offset, int pageNumber);

    /**
     * 根据快递运单号查询快递信息
     *
     * @param number 快递单号
     * @return Express 单号不存在时返回 null
     */
    Express findByNumber(String number);

    /**
     * 根据快递取件码查询快递信息
     *
     * @param code 快递取件码
     * @return Express 取件码不存在时返回 null
     */
    Express findByCode(String code);

    /**
     * 根据手机号码查询所有的快递信息
     *
     * @param userPhone 手机号码
     * @param status    快递状态 0表示查询代取件的快递(默认) 1表示查询已取件的快递 2 表示查询用户的所有快递
     * @return List<Express>
     */
    List<Express> findByUserPhone(String userPhone, int status);

    /**
     * 根据录入人的手机号，查询快递信息
     *
     * @param sysPhone 录入人的手机号码
     * @return List<Express>
     */
    List<Express> findBySysPhone(String sysPhone);

    /**
     * 根据姓名，进行模糊查询快递总数
     *
     * @param username 用户姓名
     * @return Integer
     */
    Integer findByUsername(String username);

    /**
     * 快件录入
     *
     * @param express 快递对象
     * @return true表示录入成功  false表示录入失败
     */
    boolean insert(Express express);

    /**
     * 修改快递信息
     * String number,
     * String company,
     * String username,
     * String userPhone,
     * int status
     *
     * @param id         要修改的快递id
     * @param newExpress 新的快递对象
     * @return true 表示修改成功 false 表示修改失败
     */
    boolean update(int id, Express newExpress);

    /**
     * 根据快递id删除快递信息
     *
     * @param id 要删除的快递id
     * @return true表示删除成功 false 表示删除失败
     */
    boolean delete(int id);

    /**
     * 确认取件
     *
     * @param number 要更改为已取件的快递单号
     * @return true表示已成功取件 false 表示取件失败
     */
    boolean updateStatus(String number);

}
